package com.xiaolin.algorithm.sort;

import java.util.Arrays;

/**
 * @ClassName BubbleSort
 * @Description 冒泡排序
 * @Detail 使用嵌套循环即可完成
 *              角色：
 *                  1、要排序的数组
 *                  2、临时变量，由于交换数据时使用
 *                  3、嵌套循环
 *                  4、标志位，用于校验数组是否排序好，如果排序好直接跳出循环，优化性能
 *                  5、退出循环语句
 * @Author MyPC
 * @Date 2020/7/18
 * @Version 1.0
 */
public class BubbleSort {
    public static void main(String[] args) {
        int arr[]={15,2,4,8,1,16,18};
        boolean flag;
        int temp=0;
        //外循环是（数组的长度-1）次
        for(int j=0;j<arr.length-1;j++){
            //整个内循环是否有交换标志
            flag=false;
            System.out.println("外循环次数："+(j+1));
            //内循环的比较次数是（数组的长度-1-j）次
            for (int i=0;i<arr.length-j-1;i++){
                if(arr[i] > arr[i+1]){
                    temp=arr[i+1];
                    arr[i+1]=arr[i];
                    arr[i]=temp;
                    flag=true;
                }
                System.out.println(Arrays.toString(arr));
            }
            //如果整个循环都没有交换，那么说明顺序已排好，就无需在循环了
            if(!flag){
                break;
            }
        }
    }
}
